Replace the popup-show and popup-hide signals with a readonle popup-shown
authorMatthias Clasen <mclasen@redhat.com>
Thu, 9 Mar 2006 20:20:30 +0000 (20:20 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Thu, 9 Mar 2006 20:20:30 +0000 (20:20 +0000)
2006-03-09  Matthias Clasen  <mclasen@redhat.com>

* gtk/gtkcombobox.c (gtk_combo_box_class_init): Replace the
popup-show and popup-hide signals with a readonle popup-shown
property.  (#162531, Christian Persch)

ChangeLog
ChangeLog.pre-2-10
gtk/gtkcombobox.c

index 9837c110d5b7dd93f6893db79434acd5100eac12..4afa7247f5f20064603fa02eba16117716f5e7d0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-03-09  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkcombobox.c (gtk_combo_box_class_init): Replace the
+       popup-show and popup-hide signals with a readonle popup-shown
+       property.  (#162531, Christian Persch)
+
 2006-03-09  Ross Burton  <ross@openedhand.com>
 
        * gtk/gtkwidget.c:
index 9837c110d5b7dd93f6893db79434acd5100eac12..4afa7247f5f20064603fa02eba16117716f5e7d0 100644 (file)
@@ -1,3 +1,9 @@
+2006-03-09  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkcombobox.c (gtk_combo_box_class_init): Replace the
+       popup-show and popup-hide signals with a readonle popup-shown
+       property.  (#162531, Christian Persch)
+
 2006-03-09  Ross Burton  <ross@openedhand.com>
 
        * gtk/gtkwidget.c:
index a42f1fc0c85aa4bc86d883e726103fec43754bfb..44575179b31ebd2e0e1c49e4152be8d359398a42 100644 (file)
@@ -110,6 +110,7 @@ struct _GtkComboBoxPrivate
   GSList *cells;
 
   guint popup_in_progress : 1;
+  guint popup_shown : 1;
   guint destroying : 1;
   guint add_tearoffs : 1;
   guint has_frame : 1;
@@ -185,8 +186,6 @@ struct _GtkComboBoxPrivate
 
 enum {
   CHANGED,
-  POPUP_SHOW,
-  POPUP_HIDE,
   LAST_SIGNAL
 };
 
@@ -200,7 +199,8 @@ enum {
   PROP_ADD_TEAROFFS,
   PROP_TEAROFF_TITLE,
   PROP_HAS_FRAME,
-  PROP_FOCUS_ON_CLICK
+  PROP_FOCUS_ON_CLICK,
+  PROP_POPUP_SHOWN
 };
 
 static GtkBinClass *parent_class = NULL;
@@ -429,9 +429,9 @@ static void     combo_cell_data_func                         (GtkCellLayout   *c
                                                              GtkTreeIter     *iter,
                                                              gpointer         data);
 static void     gtk_combo_box_child_show                     (GtkWidget       *widget,
-                                                             gpointer         user_data);
+                                                             GtkComboBox     *combo_box);
 static void     gtk_combo_box_child_hide                     (GtkWidget       *widget,
-                                                             gpointer         user_data);
+                                                             GtkComboBox     *combo_box);
 
 
 /* GtkCellEditable method implementations */
@@ -552,25 +552,6 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass)
                   g_cclosure_marshal_VOID__VOID,
                   G_TYPE_NONE, 0);
 
-  combo_box_signals[POPUP_SHOW] =
-    g_signal_new ("popup-show",
-                  G_OBJECT_CLASS_TYPE (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-
-  combo_box_signals[POPUP_HIDE] =
-    g_signal_new ("popup-hide",
-                  G_OBJECT_CLASS_TYPE (klass),
-                  G_SIGNAL_RUN_LAST,
-                  0,
-                  NULL, NULL,
-                  g_cclosure_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-
-
   /* properties */
   /**
    * GtkComboBox:model:
@@ -732,6 +713,23 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass)
                                                         GTK_PARAM_READWRITE));
 
 
+  /**
+   * GtkComboBox:popup-shown:
+   *
+   * Whether the combo boxes dropdown is popped up. 
+   * Note that this property is mainly useful, because
+   * it allows you to connect to notify::popup-shown.
+   *
+   * Since: 2.10
+   */
+  g_object_class_install_property (object_class,
+                                   PROP_POPUP_SHOWN,
+                                   g_param_spec_boolean ("popup-shown",
+                                                         P_("Popup shown"),
+                                                         P_("Whether the combo's dropdown is shown"),
+                                                         FALSE,
+                                                         GTK_PARAM_READABLE));
+  
   gtk_widget_class_install_style_property (widget_class,
                                            g_param_spec_boolean ("appears-as-list",
                                                                  P_("Appears as list"),
@@ -777,6 +775,7 @@ gtk_combo_box_init (GtkComboBox *combo_box)
   combo_box->priv->col_column = -1;
   combo_box->priv->row_column = -1;
 
+  combo_box->priv->popup_shown = FALSE;
   combo_box->priv->add_tearoffs = FALSE;
   combo_box->priv->has_frame = TRUE;
   combo_box->priv->is_cell_renderer = FALSE;
@@ -834,6 +833,17 @@ gtk_combo_box_set_property (GObject      *object,
        gtk_combo_box_set_title (combo_box, g_value_get_string (value));
         break;
 
+      case PROP_POPUP_SHOWN:
+        if (g_value_get_boolean (value))
+          {
+            gtk_combo_box_popup (combo_box);
+          }
+        else
+          {
+            gtk_combo_box_popdown (combo_box);
+          }
+        break;
+
       default:
         break;
     }
@@ -885,6 +895,10 @@ gtk_combo_box_get_property (GObject    *object,
         g_value_set_string (value, gtk_combo_box_get_title (combo_box));
         break;
 
+      case PROP_POPUP_SHOWN:
+        g_value_set_boolean (value, combo_box->priv->popup_shown);
+        break;
+
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
         break;
@@ -2153,18 +2167,22 @@ gtk_combo_box_forall (GtkContainer *container,
 
 static void 
 gtk_combo_box_child_show (GtkWidget *widget,
-                         gpointer   user_data) 
+                          GtkComboBox *combo_box)
 {
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
-  g_signal_emit (combo_box, combo_box_signals[POPUP_SHOW], 0);
+  GtkComboBoxPrivate *priv = combo_box->priv;
+
+  priv->popup_shown = TRUE;
+  g_object_notify (G_OBJECT (combo_box), "popup-shown");
 }
 
 static void 
 gtk_combo_box_child_hide (GtkWidget *widget,
-                         gpointer   user_data)
+                          GtkComboBox *combo_box)
 {
-  GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);  
-  g_signal_emit (combo_box, combo_box_signals[POPUP_HIDE], 0);
+  GtkComboBoxPrivate *priv = combo_box->priv;
+
+  priv->popup_shown = FALSE;
+  g_object_notify (G_OBJECT (combo_box), "popup-shown");
 }
 
 static gboolean